<test>
    <substitutions>
       <substitution>
           <name>datetime_transform</name>
           <values>
               <value>toSecond</value>
               <value>toMinute</value>
               <value>toHour</value>
               <value>toDayOfMonth</value>
               <value>toDayOfYear</value>
               <value>toMonth</value>
               <value>toQuarter</value>
               <value>toYear</value>
               <value>toISOWeek</value>
               <value>toISOYear</value>

               <value>toStartOfMinute</value>
               <value>toStartOfFiveMinutes</value>
               <value>toStartOfFifteenMinutes</value>
               <value>toStartOfHour</value>
               <value>toStartOfDay</value>
               <value>toDate</value>
               <value>toMonday</value>
               <value>toStartOfMonth</value>
               <value>toStartOfQuarter</value>
               <value>toStartOfYear</value>
               <value>toStartOfISOYear</value>

               <value>toTime</value>

               <value>toRelativeYearNum</value>
               <value>toRelativeMonthNum</value>
               <value>toRelativeWeekNum</value>
               <value>toRelativeDayNum</value>
               <value>toRelativeHourNum</value>
               <value>toRelativeMinuteNum</value>
               <value>toRelativeSecondNum</value>

               <value>toYYYYMM</value>
               <value>toYYYYMMDD</value>
               <value>toYYYYMMDDhhmmss</value>

               <value>timeSlot</value>
               <value>toRelativeQuarterNum</value>
               <value>toStartOfTenMinutes</value>
               <value>toUnixTimestamp</value>
           </values>
       </substitution>
        <substitution>
           <name>datetime_transform_with_mode</name>
           <values>
               <value>toDayOfWeek</value>
               <value>toStartOfWeek</value>
               <value>toWeek</value>
               <value>toYearWeek</value>
           </values>
        </substitution>
       <substitution>
           <name>date_transform</name>
           <values>
               <value>toDayOfMonth</value>
               <value>toDayOfWeek</value>
               <value>toDayOfYear</value>
               <value>toWeek</value>
               <value>toMonth</value>
               <value>toQuarter</value>
               <value>toYear</value>
               <value>toYearWeek</value>
               <value>toISOWeek</value>
               <value>toISOYear</value>

               <value>toDate</value>
               <value>toMonday</value>
               <value>toStartOfDay</value>
               <value>toStartOfWeek</value>
               <value>toStartOfMonth</value>
               <value>toStartOfQuarter</value>
               <value>toStartOfYear</value>
               <value>toStartOfISOYear</value>

               <value>toRelativeYearNum</value>
               <value>toRelativeMonthNum</value>
               <value>toRelativeWeekNum</value>
               <value>toRelativeDayNum</value>

               <value>toYYYYMM</value>
               <value>toYYYYMMDD</value>
               <value>toYYYYMMDDhhmmss</value>

               <value>toRelativeQuarterNum</value>
           </values>
        </substitution>
        <substitution>
            <name>binary_function</name>
            <values>
                <value>lessOrEquals</value>
                <value>less</value>
                <value>greater</value>
                <value>greaterOrEquals</value>
                <value>equals</value>
                <value>notEquals</value>
                <value>plus</value>
                <value>minus</value>
                <value>addDays</value>
                <value>addHours</value>
                <value>addMinutes</value>
                <value>addMonths</value>
                <value>addQuarters</value>
                <value>addSeconds</value>
                <value>addWeeks</value>
                <value>addYears</value>
                <value>subtractDays</value>
                <value>subtractHours</value>
                <value>subtractMinutes</value>
                <value>subtractMonths</value>
                <value>subtractQuarters</value>
                <value>subtractSeconds</value>
                <value>subtractWeeks</value>
                <value>subtractYears</value>
            </values>
        </substitution>
        <substitution>
            <name>time_zone</name>
            <values>
               <value>UTC</value>
               <value>Asia/Istanbul</value>
               <value>Asia/Kolkata</value>
            </values>
        </substitution>
    </substitutions>

    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {datetime_transform}(t, '{time_zone}'))</query>
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {datetime_transform_with_mode}(t, 0, '{time_zone}'))</query>
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDate('2017-01-01') + number % 1000 + rand() % 10 AS t, {date_transform}(t))</query>
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, {binary_function}(t, 1))</query>

    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, toStartOfInterval(t, INTERVAL 1 month))</query>
    <query>SELECT count() FROM numbers(50000000) WHERE NOT ignore(toDateTime('2017-01-01 00:00:00') + number % 100000000 + rand() % 100000 AS t, date_trunc('month', t))</query>
</test>
